#include "Perdedor.h"
#include "Fifo.h"
#include "Canales.h"
#include "Logger.h"
#include "FuncionesAuxiliares.h" // avisar, recibirAviso
#include <cstdlib>

using namespace std;

Perdedor::Perdedor(char* jugador) : Receptor(), Trasmisor() {
	this->jugador = string(jugador);
	sinc = new Fifo(ESTADPERDSINC);
}


Perdedor::~Perdedor() {	
}


int Perdedor::correr() {
	
	string remitente = "PERDEDOR";
	
	Logger::loggear("Inicia",remitente);	
	abrirCanalEscritura((char*) PERDEDORESTAD);
	abrirCanalLectura((char*) ESTADPERDEDOR);
	
	trasmitirOKInicial();
	
	while (true) {
		Logger::loggear("Voy a leer",remitente);
		leer(sizeof(Aviso));
		Aviso aviso = Aviso::deserializar(buffer, bytesLeidos);
		if (aviso.getTipo() == FINDELJUEGO)
			break;
		Logger::loggear("APOYO mano",remitente);
		apoyarMano();
		
		recibirAviso(sinc);
	}
	cerrarCanalEscritura();
	cerrarCanalLectura();
	sinc->cerrar();
	Logger::loggear("Finaliza",remitente);
	return 0;
}


void Perdedor::cerrarCanalEscritura() {
	escritor->cerrar();
}


void Perdedor::apoyarMano() {
	avisar(escritor, atoi( (this->jugador).c_str() ) );
}


void Perdedor::trasmitirOKInicial() {
	apoyarMano();
}
